Computer systems generally include one or more processors interfaced to a temporary data storage device such as a memory device and one or more persistent data storage devices such as disk drives. Each disk drive generally has an associated disk controller. Data is transferred from the disk drives to the disk controller and is then transferred to the memory device over a communications bus or similar. In many computer applications, the speed at which data can be accessed on the disk drives is a limiter to performance.
Data compression has the capability to reduce the size of data and increase the speeds with which data can be written to and read from the disk drives. A sequential access device does not have directly addressable storage and hence it is possible to use compression to both increase performance and reduce the size of the data on media. Since sequential devices are not directly addressable, the compression module is free to redefine the format of data on media and can add compression headers in which to store useful information that will be needed when the data is uncompressed. In this way, compression for sequential access storage is able to be transparent to the application.
It is more difficult to compress data for random access devices in a manner that is transparent to the application. Compression with these systems having addressable storage requires a virtualization layer in the compression module that allows application addresses to be translated to device addresses. The virtualization also permits a compression layer to add useful metadata to the compressed objects. Using this method, a compression module can both produce capacity and increase performance for data transfer.
In certain applications, it is desirable to have a compression module for random access addressable storage that operates without a complex compression module that performs virtual address translation, garbage collection and optimal packing. In some of these applications, it is not necessary to conserve storage capacity but merely to reduce the time to write and/or read data to or from media such as disk drives. An example of a device that would benefit from write time reduction are memory devices that have write data rates orders of magnitude slower than read data rates.